/-docs
/-editor
/-files
/-files-old
/-imports
/-layout
/-storage
/-tests
/-typings
TypeScriptService.ts
functions.ts
ko.ts
persistence.api.ts
persistence.ts
shell.ts
teapo.html
teapo.js
teapo.ts
x
          this._loadInitialStateFromDom(pathElements);
145
            });
146
147
        }
148
      }
149
    }
150
151
152
    
153
    private _initFromOpenDatabase(openDatabase, forceLoadFromDom: boolean, pathElements: { [name: string]: HTMLScriptElement; }) {
154
      var dbName = this.handler.uniqueKey ? this.handler.uniqueKey : getUniqueKey();
155
156
      var detect = new teapo.storage.attached.webSQL.DetectStorage();
157
      detect.detectStorageAsync(dbName, (error, load) => {
158
        if (error) {
159
          alert('webSQL.DetectStorage.detectStorageAsync ' + error);
160
          return;
161
        }
162
163
        console.log('webSQL: success. ', load);
164
      });
165
166
      var db = openDatabase(dbName, 1, null, 1024 * 1024 * 5);
167
168
      this._executeSql = (
169
        sqlStatement: string,
170
        args: any[],
171
        callback: (transaction: SQLTransaction, result: SQLResultSet) => void,
172
        errorCallback: (transaction: SQLTransaction, error: SQLError) => void) => {
173
174
        var errorCallbackSafe = (t: SQLTransaction, e: SQLError) => {
175
          alert(e + ' ' + e.message + '\n' + sqlStatement + '\n' + args);
176
          errorCallback(t, e);
177
        };
178
179
        db.transaction((t) => t.executeSql(sqlStatement, args, callback, errorCallbackSafe));
180
      };
181
      this._insertMetadataSql = 'INSERT INTO "*metadata" (name, value) VALUES(?,?)';
182
      this._updateMetadataSql = 'UPDATE "*metadata" SET value=? WHERE name=?';
183
184
      this._metadataProperties = {};
185
      this._loadTableListFromWebsql((tableList) => {
186
        var metadataTableExists = false;
187
        for (var i = 0; i < tableList.length; i++) {
188
          if (tableList[i] === '*metadata') {
189
            metadataTableExists = true;
190
            break;
191
          }
192
        }
193
        if (!metadataTableExists || forceLoadFromDom) {
194
          this._loadInitialStateFromDom(pathElements);
195
          return;
196
        }
197
198
        var domEdited = this._metadataElement ?
199
          safeParseInt(this._metadataElement.getAttribute('edited')) :
200
          null;
201
202
        loadPropertiesFromWebSql(
203
          '*metadata',
204
          this._metadataElement,
205
          this._metadataProperties,
206
          this._executeSql,
207
          sqlError => {
208
            if (sqlError) {
209
              this.handler.documentStorageCreated(new Error('loadPropertiesFromWebSql:*metadata: ' + sqlError.message), null);
210
              return;
211
            }
212
213
            var wsEdited = safeParseInt(this._metadataProperties.edited);
214
            if (!wsEdited || domEdited && domEdited > wsEdited)
215
              this._loadInitialStateFromDom(pathElements);
216
            else
163:0